<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="author" content="lijinbo" />
    <title>多维度排序orderBy</title>
  </head>
  <body>
    <script>
      /**
       * js数组排序 支持数字和字符串
       * @param params
       * @param arrObj   obj     必填  数组对象
       * @param keyName  string  必填  要排序的属性名称
       * @param type     int     选填  默认type:0 正顺  type:1反顺
       */
      function arrItemSort(arrObj, keyName, type) {
        // 这里如果 直接等于arrObj，相当于只是对对象的引用，改变排序会同时影响原有对象的排序，而通过arrObj.slice(0)，
        // 表示把对象复制给另一个对象，两者间互不影响
        var tempArrObj = arrObj.slice(0)
        return tempArrObj.sort(function (obj1, obj2) {
          var val1 = obj1[keyName]
          var val2 = obj2[keyName]
          // 排序
          if (val1 < val2) {
            return type == 1 ? 1 : -1
          } else if (val1 > val2) {
            return type == 1 ? -1 : 1
          } else {
            return 0
          }
        })
      }

      var temp = [
        { name: 'zjf', score: 50, age: 10 },
        { name: 'lyy', score: 90, age: 5 },
        { name: 'zzx', score: 90, age: 12 }
      ]
      // 根据age排序
      var temp1 = arrItemSort(temp, 'age', 1)
      console.log(temp1)

      // 先按年龄排序，再按分数排序
      var temp2 = arrItemSort(arrItemSort(temp, 'age', 1), 'score', 1)
      console.log(temp2)
    </script>
  </body>
</html>
